package model

import (
	"fmt"
)

type GameData struct {
	Id   uint   `json:"id"`
	Uuid string `json:"uuid"`

	// Shengxiao
	// 1鼠、2牛、3虎、4兔、5龙、6蛇、7马、8羊、9猴、10鸡、11狗、12猪
	Shengxiao int `json:"shengxiao"`
	X         int `json:"x"`
	Y         int `json:"y"`
	Score     int `json:"score"`
}

var MapData = NewRWMap(0)

func GetDataByUUid(uuid string) (*GameData, error) {
	data, existed := MapData.Get(uuid)
	if existed {
		return &data, nil
	} else {
		return nil, fmt.Errorf("不存在该key")
	}
}

func SetDataByUUid(g GameData) {
	MapData.Set(g.Uuid, g)
}

// ChangeDataByUUid 给move使用, 传入错误的uuid无法完成新增且移动
func ChangeDataByUUid(g GameData) {
	data, existed := MapData.Get(g.Uuid)
	if existed {
		// 只允许修改x和y
		data.X = g.X
		data.Y = g.Y
		MapData.Set(data.Uuid, data)
	}
}

func GetDataList() []GameData {
	var list = make([]GameData, 0)

	MapData.Each(func(k string, v GameData) bool {
		list = append(list, v)
		return true
	})
	return list
}

func DeleteDataByUUid(uuid string) {
	MapData.Delete(uuid)
}
